package chapter05;

public class Java04_Object_String_01 {
    public static void main(String[] args) throws Exception{
        // TODO 字符串-基本操作

        // TODO 拼接：将多个字符串连接在一起
        String s = "a" + "b";   // "ab"
        String s1 = "ab";
        // JVM在使用+号时,如果加号两边出现字符串则会将剩下的数据都转成字符串
        // 多个加号按从左至右的顺序运算,可以使用括号()调整运算顺序
        String s2 = "abc" + 1 + 2;  // abc12
        String s3 = 1 + "abc" + 2;  // 1abc2
        String s4 = 1 + 2 + "abc";  // 3abc
        System.out.println(s.hashCode());
        System.out.println(s1.hashCode());
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);

        System.out.println(s1.concat("abc"));

        System.out.println("-------------");

        // TODO 比较
        String a = "a";
        String b = "A";
        /*
            相等
            1.equals()：每个字符、大小写类型都相等
            2.equalsIgnoreCase()：忽略大小写判断每个字符是否相等
            3.compareTo()：返回值是int类型，判断的是字节数(字典顺序)
            4.compareToIgnoreCase()：忽略大小写，返回值是int类型
         */
        System.out.println(a.equals(b));    // false
        System.out.println(a.equalsIgnoreCase(b));  // true
        // i值为正数则a大于b；i值为负数则a小于b；i值为0则a等于b
        int i = a.compareTo(b);
        System.out.println(i);  // 32
        //ASCII码中大写字母的ASCII码比小写字母的ASCII码大32
        byte b1 = (byte)'A';
        byte b2 = (byte)'a';
        System.out.println("A="+b1);    // A=65
        System.out.println("a="+b2);    // a=97

        System.out.println(a.compareToIgnoreCase(b));   // 0

        System.out.println("-------------");

        // TODO 截断
        /*
            截取字符串的操作
            1.subString(截取字符串的起始位置[索引，包含],结束位置[索引，不包含]),如果只传递一个参数则截取该位置到字符串的末尾
            2.split(): 按照指定的规则进行分割字符串,将字符串分割成几个部分
         */
        String jd = "Hello,World,zhangsan,lisi";
        System.out.println(jd.substring(0, 3));
        System.out.println(jd.substring(0, "Hello".length()));
        System.out.println(jd.substring(6,jd.length()));

        String[] jd1 = jd.split(",");
        System.out.println(jd1.length);
        for (String jd2 : jd1){
            System.out.println(jd2);
        }

        System.out.println("-----------------------");

        // TODO 去除空格
        /*
            1.trim(): 去除字符串首位的空格
         */
        String qc = " Hello World ";
        System.out.println("!" + qc.trim() + "!");

        System.out.println("-----------------------");

        // TODO 替换
        /*
            1.replace(): 替换指定的字符串
            2.replaceAll(): 按照指定规则进行替换
         */
        String hw = "Hello World zhangsan";
        System.out.println(hw.replace("World", "Java"));
        System.out.println(hw.replaceAll("World|zhangsan","Java"));

        System.out.println("-------------");

        // TODO 字符串的大小写转换
        /*
            1.toLowerCase()：转换为小写
            2.toUpperCase()：转换为大写
         */
        String zh = "Hello World";
        System.out.println(zh.toLowerCase());
        System.out.println(zh.toUpperCase());

        // subString(截取开始位置,截取结束位置[不包含])：截取字符串
        String className = "user";  // u + ser
        String c1 = className.substring(0,1);   // u
        String c2 = className.substring(1); // ser
        System.out.println(c1.toUpperCase() + c2);

        // TODO 查找
        /*
            1.charAt()可以传递索引定位字符串中指定位置的字符
            2.indexOf()用于获取数据在字符串中第一次出现的位置
            3.lastIndexOf()用于获取数据在字符串中最后一次出现的位置
            4.contains()用于判断字符串中是否包含指定的字符串
            5.startsWith()用于判断字符串是否以指定的字符串开头
            6.endsWith()用于判断字符串是否以指定的字符串结尾
         */
        String cz = "World Hello World World";
        char[] chars = cz.toCharArray();
        byte[] bytes = cz.getBytes("UTF-8");
        System.out.println(cz.charAt(1));
        System.out.println(cz.indexOf("World"));
        System.out.println(cz.lastIndexOf("World"));
        System.out.println(cz.contains("Hello"));
        System.out.println(cz.startsWith("World"));
        System.out.println(cz.endsWith("Hello"));

        System.out.println("-------------");

        // TODO 为空判断
        /*
            1.isEmpty()：判断字符串是否为空，如果字符串长度为0，则返回true，否则返回false;空格是特殊的字符，看不到但不为空
         */
        String k = " ";
        System.out.println(k.isEmpty());
    }
}

